// common 模块中的自动配置类：src/main/java/com/xxx/common/config/FilterAutoConfiguration.java
package com.zeker.common.config;

import com.zeker.common.filter.EncodingFilter;
import com.zeker.common.filter.LoginFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
项目启动时，Spring Boot 会通过 @SpringBootApplication 注解（内部包含 @ComponentScan）扫描指定包路径下的类。
当扫描到带有 @Configuration 的配置类时，会将其加载到 Spring 容器中，并解析类中的 @Bean 方法。
 **/
@Configuration // 标识为配置类
public class FilterAutoConfiguration {

    // 注册编码过滤器【精细版：可以设置拦截路径和执行顺序】
    @Bean
    public FilterRegistrationBean<EncodingFilter> encodingFilterRegistration() {

        FilterRegistrationBean<EncodingFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new EncodingFilter()); // 绑定过滤器实例
        registration.addUrlPatterns("/*"); // 拦截所有请求（可根据需求调整）
        registration.setOrder(1); // 执行顺序（数字越小越先执行，确保编码过滤器最先执行）
        System.out.println("UTF-8编码过滤器启动成功！");//项目启动时就会打印，而不是运行时
        return registration;
    }

    //登录过滤器【精细版：可以设置拦截路径和执行顺序】
     @Bean
     public FilterRegistrationBean<LoginFilter> loginFilterRegistration() {
         FilterRegistrationBean<LoginFilter> registration = new FilterRegistrationBean<>();
         registration.setFilter(new LoginFilter());
         registration.addUrlPatterns("/api/*");  // 仅拦截/api/开头的路径
         registration.setOrder(2);  // 指定执行顺序（数字越小越先执行）
         System.out.println("登录过滤器启动成功！");
         return registration;
     }

//    //简洁版：使用默认配置
//    @Bean
//    public LoginFilter loginFilter() {
//        return new LoginFilter();
//    }


}